1、复现原始NAFnet¶

DONE
已训练100个epoch,发现效果不如NAFnet放出的模型
https://github.com/megvii-research/NAFNet/issues/75

2、wht-NAFnet训练¶

DOING
1) 已训练50个epoch,发现效果不如NAFnet放出的模型,也不如训练100epoch的NAFnet
2) 发现矩阵计算时长要比蝶式算法长三倍,需要后续改造代码

3、 找到更多非剪裁的噪声图像,用于测试¶

DOING
发现SIDD数据集肉眼无法看出噪声。 image.png image-2.png

4、 将非对称卷积替换3×3深度可分卷积¶

PENDING

5、 使用tensorboard、profile考察原始NAFnet、wht-NAFnet-蝶式、wht-NAFnet-矩阵,在训练阶段的算力消耗¶

PENDING

6、 改造wht-NAFnet代码,适配wht的矩阵计算,即提前储存所有Hadmard矩阵¶

PENDING

原始NAFnet训练100epoch结果¶

In [5]:
import re
import matplotlib.pyplot as plt
import numpy as np
# 正则表达式来提取信息
pattern = r"epoch:\s*(\d+)\s*,\s*iter:\s*([\d,]+)\s*,.*l_pix:\s*(-?\d+\.\d+e[+-]\d+|\-?\d+\.\d+)"

# 用于存储 iter 和 l_pix 的数据
iters = []
l_pix_values = []

# 打开 .log 文件并逐行读取
log_file_path = './experiments/NAFNet-SIDD-width64_epoch100_nafnet/train_NAFNet-SIDD-width64_20241108_171135.log'  # 替换为你的 .log 文件路径
with open(log_file_path, 'r') as file:
    for line in file:
        match = re.search(pattern, line)
        if match:
            iter_value = match.group(2).replace(',', '')  # 去除逗号,转换成纯数字
            l_pix = float(match.group(3))  # 将 l_pix 转换为浮动类型
            iters.append(int(iter_value))  # 将 iter 存入列表
            l_pix_values.append(l_pix)     # 将 l_pix 存入列表

# 绘制折线图
plt.figure(figsize=(10, 6))
plt.plot(iters, l_pix_values, linestyle='-', color='b', label='l_pix vs iter')

# 设置标题和标签
plt.title('Iteration vs. l_pix', fontsize=16)
plt.xlabel('Iteration', fontsize=14)
plt.ylabel('l_pix', fontsize=14)
plt.ylim(-50, -30)
plt.grid(True)
plt.legend()

# 显示图形
plt.tight_layout()
plt.show()

# 转换为 numpy 数组,方便后续处理
iters = np.array(iters)
l_pix_values = np.array(l_pix_values)

# 使用 3 阶多项式拟合数据
coefficients = np.polyfit(iters, l_pix_values, 3)

# 生成拟合曲线(使用拟合的系数生成一个多项式函数)
polynomial = np.poly1d(coefficients)

# 生成平滑的拟合曲线数据
smooth_x = np.linspace(min(iters), max(iters), 500)  # 使用更多的点来绘制平滑曲线
smooth_y = polynomial(smooth_x)

# 绘制原始数据点
plt.figure(figsize=(10, 6))
plt.plot(iters, l_pix_values, 'o', label='Original Data', color='b')

# 绘制拟合后的平滑曲线
plt.plot(smooth_x, smooth_y, '-', label='Fitted Curve', color='r')

# 设置标题和标签
plt.title('Iteration vs. l_pix with Polynomial Fit', fontsize=16)
plt.xlabel('Iteration', fontsize=14)
plt.ylabel('l_pix', fontsize=14)
plt.grid(True)

# 扩大纵轴范围,保持足够的空间
plt.ylim(min(l_pix_values) - 10, max(l_pix_values) + 10)

# 添加图例
plt.legend()

# 显示图形
plt.tight_layout()
plt.show()

image.png 测试用原版图片

image.png NAFnet的pretrain模型去噪的图片,PSNR:40.3045,SSIM:0.9614

image.png 训练50epoch的wht-NAFnet模型去噪的图片,PSNR: 39.5413,SSIM: 0.9572

image.png 训练100个epoch的原始nafnet模型去噪的图片,PSNR:39.9652,SSIM:0.9599

In [ ]: